package com.example.pdfprocessor.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

import java.awt.Desktop;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

/**
 * 应用启动后自动打开浏览器
 */
@Slf4j
@Component
public class BrowserOpener {

    @Value("${server.port}")
    private String port;

    @Value("${server.servlet.context-path}")
    private String contextPath;

    /**
     * 应用程序准备就绪后触发，自动打开默认浏览器访问应用
     */
    @EventListener(ApplicationReadyEvent.class)
    public void openBrowserAfterStartup() {
        String url = "http://localhost:" + port + contextPath;
        log.info("应用已启动，正在尝试打开浏览器访问: {}", url);
        
        try {
            // 检查桌面支持
            if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
                // 打开默认浏览器
                Desktop.getDesktop().browse(new URI(url));
                log.info("成功打开浏览器");
            } else {
                log.warn("当前系统不支持自动打开浏览器");
                // 尝试使用命令行打开浏览器（Windows系统）
                try {
                    Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url);
                    log.info("通过命令行成功打开浏览器");
                } catch (Exception e) {
                    log.error("通过命令行打开浏览器失败: {}", e.getMessage());
                }
            }
        } catch (IOException | URISyntaxException e) {
            log.error("打开浏览器访问应用失败: {}", e.getMessage());
        }
    }
} 